// new 手写
function Person(name, age) {
    // 函数的运行过程 就是构造对象的过程
    this.name = name;
    this.age = age;
    // return {}
}

Person.prototype.say = function () {
    console.log(this.age)
}

p2 = new Person('iverson', 18)
// console.log(p2.hasOwnProperty('name'))
// console.log(p2.hasOwnProperty('say'))
// console.log(Object.hasOwnProperty('name'))
// console.log(Object.hasOwnProperty('say'))
// JS 是原型式的面向对象
// p2 的原型对象， 由默认 Object 中间插入 Person.prototype
// p2.say

let p3 = myNew(Person, 'iverson', 18)

// function myNew(fn, name, age) {
//     const that = {}
//     that.name = name
//     that.age = age
//     that.__proto__ = fn.prototype
//     return that
// }

function myNew(fn, ...args) {
    // let obj = {}
    let obj = Object.create(fn.prototype)
    // 返回一个空对象 且其对象的原型属性已经指向了原型对象
    Person.call(obj, ...args)
    return obj
}

console.log(p3)
